Source for file SC_CustomerList.php

Documentation is available at SC_CustomerList.php

  1. <?php
  2. /*
  3.  * This file is part of EC-CUBE
  4.  *
  5.  * Copyright(c) 2000-2007 LOCKON CO.,LTD. All Rights Reserved.
  6.  *
  7.  * http://www.lockon.co.jp/
  8.  *
  9.  * This program is free software; you can redistribute it and/or
  10.  * modify it under the terms of the GNU General Public License
  11.  * as published by the Free Software Foundation; either version 2
  12.  * of the License, or (at your option) any later version.
  13.  *
  14.  * This program is distributed in the hope that it will be useful,
  15.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17.  * GNU General Public License for more details.
  18.  *
  19.  * You should have received a copy of the GNU General Public License
  20.  * along with this program; if not, write to the Free Software
  21.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  22.  */
  23.  
  24. /*  [名称] SC_CustomerList
  25.  *  [概要] 会員検索用クラス
  26.  */
  27. class SC_CustomerList extends SC_SelectSql {
  28.  
  29.     var $arrColumnCSV;
  30.             
  31.     function SC_CustomerList($array$mode ''{
  32.         parent::SC_SelectSql($array);
  33.         
  34.         $masterData new SC_DB_MasterData_Ex();
  35.         $arrMobileDomain $masterData->getMasterData("mtb_mobile_domain");
  36.         
  37.         $objDb new SC_Helper_DB_Ex();
  38.  
  39.         if($mode == ""{
  40.             // 会員本登録会員で削除していない会員
  41.             $this->setWhere("status = 2 AND del_flg = 0 ");
  42.             // 登録日を示すカラム
  43.             $regdate_col 'dtb_customer.update_date';
  44.         }
  45.  
  46.         if($mode == "customer"{
  47.             // 管理機能顧客検索の場合仮登録会員も検索
  48.             //$this->setWhere( "(status = 1 OR status = 2) AND del_flg = 0 ");
  49.             $this->setWhere" del_flg = 0 ");
  50.             // 登録日を示すカラム
  51.             $regdate_col 'dtb_customer.update_date';
  52.         }
  53.  
  54.         // メールマガジンの場合
  55.         if($mode == "magazine"{
  56.             $this->setWhere("(del_flg = 0 OR del_flg IS NULL)");
  57.             $this->setWhere("status = 2");
  58.             // 登録日を示すカラム
  59.             $regdate_col 'dtb_customer.create_date';
  60.         }
  61.  
  62.         // 顧客ID
  63.         if (!isset($this->arrSql['customer_id'])) $this->arrSql['customer_id'"";
  64.         if strlen($this->arrSql['customer_id']{
  65.             $this->setWhere"customer_id =  ?" );
  66.             $this->arrVal[$this->arrSql['customer_id'];
  67.         }
  68.  
  69.         // 名前
  70.         if (!isset($this->arrSql['name'])) $this->arrSql['name'"";
  71.         if strlen($this->arrSql['name']{
  72.             if(DB_TYPE == "pgsql"){
  73.                 $this->setWhere("(name01 || name02 LIKE ?)" );
  74.             }elseif(DB_TYPE == "mysql"){
  75.                 $this->setWhere("concat(name01,name02) LIKE ?" );
  76.             }
  77.  
  78.             $searchName $this->addSearchStr($this->arrSql['name']);
  79.             $this->arrVal[mb_ereg_replace("[  ]+","",$searchName);
  80.         }
  81.  
  82.         // 名前(カナ)
  83.         if (!isset($this->arrSql['kana'])) $this->arrSql['kana'"";
  84.         if strlen($this->arrSql['kana']{
  85.             if(DB_TYPE == "pgsql"){
  86.                 $this->setWhere("(kana01 || kana02 LIKE ?)");
  87.             }elseif(DB_TYPE == "mysql"){
  88.                 $this->setWhere("concat(kana01,kana02) LIKE ?" );
  89.             }
  90.             $searchKana $this->addSearchStr($this->arrSql['kana']);
  91.             $this->arrVal[mb_ereg_replace("[  ]+","",$searchKana);
  92.         }
  93.  
  94.         // 都道府県
  95.         if (!isset($this->arrSql['pref'])) $this->arrSql['pref'"";
  96.         if strlen($this->arrSql['pref']{
  97.             $this->setWhere"pref = ?" );
  98.             $this->arrVal[$this->arrSql['pref'];
  99.         }
  100.  
  101.         // 電話番号
  102.         if (!isset($this->arrSql['tel'])) $this->arrSql['tel'"";
  103.         if is_numeric$this->arrSql['tel') ) {
  104.             if(DB_TYPE == "pgsql"){
  105.                 $this->setWhere"(tel01 || tel02 || tel03 LIKE ?)" );
  106.             }elseif(DB_TYPE == "mysql"){
  107.                 $this->setWhere("concat(tel01,tel02,tel03) LIKE ?" );
  108.             }
  109.             $searchTel $this->addSearchStr($this->arrSql['tel']);
  110.             $this->arrVal[ereg_replace("-"""$searchTel);
  111.         }
  112.  
  113.         //性別
  114.         if (!isset($this->arrSql['sex'])) $this->arrSql['sex'"";
  115.         if is_array$this->arrSql['sex') ){
  116.             $arrSexVal $this->setItemTerm$this->arrSql['sex',"sex" );
  117.             foreach ($arrSexVal as $data{
  118.                 $this->arrVal[$data;
  119.             }
  120.         }
  121.  
  122.         //職業
  123.         if (!isset($this->arrSql['job'])) $this->arrSql['job'"";
  124.         if is_array$this->arrSql['job') ){
  125.             if in_array("不明"$this->arrSql['job') ) {
  126.                 $arrJobVal $this->setItemTermWithNull$this->arrSql['job',"job" );
  127.             else {
  128.                 $arrJobVal $this->setItemTerm$this->arrSql['job',"job" );
  129.             }
  130.             if (is_array($arrJobVal)) {
  131.                 foreach ($arrJobVal as $data{
  132.                     $this->arrVal[$data;
  133.                 }
  134.             }
  135.         }
  136.  
  137.         // E-MAIL
  138.         if (!isset($this->arrSql['email'])) $this->arrSql['email'"";
  139.         if (strlen($this->arrSql['email']0{
  140.             //カンマ区切りで複数の条件指定可能に
  141.             $this->arrSql['email'explode(","$this->arrSql['email']);
  142.             $sql_where "";
  143.             foreach($this->arrSql['email'as $val{
  144.                 $val trim($val);
  145.                 //検索条件を含まない
  146.                 if($this->arrSql['not_emailinc'== '1'{
  147.                     if($sql_where == ""{
  148.                         $sql_where .= "dtb_customer.email NOT ILIKE ? ";
  149.                     else {
  150.                         $sql_where .= "AND dtb_customer.email NOT ILIKE ? ";
  151.                     }
  152.                 else {
  153.                     if($sql_where == ""{
  154.                         $sql_where .= "dtb_customer.email ILIKE ? ";
  155.                     else {
  156.                         $sql_where .= "OR dtb_customer.email ILIKE ? ";
  157.                     }
  158.                 }
  159.                 $searchEmail $this->addSearchStr($val);
  160.                 $this->arrVal[$searchEmail;
  161.             }
  162.             $this->setWhere($sql_where);
  163.         }
  164.  
  165.         // E-MAIL(mobile)
  166.         if (!isset($this->arrSql['email_mobile'])) $this->arrSql['email_mobile'"";
  167.         
  168.         if (strlen($this->arrSql['email_mobile']0{
  169.             //カンマ区切りで複数の条件指定可能に
  170.             $this->arrSql['email_mobile'explode(","$this->arrSql['email_mobile']);
  171.             $sql_where "";
  172.             foreach($this->arrSql['email_mobile'as $val{
  173.                 $val trim($val);
  174.                 //検索条件を含まない
  175.                 if($this->arrSql['not_email_mobileinc'== '1'{
  176.                     if($sql_where == ""{
  177.                         $sql_where .= "dtb_customer.email_mobile NOT ILIKE ? ";
  178.                     else {
  179.                         $sql_where .= "AND dtb_customer.email_mobile NOT ILIKE ? ";
  180.                     }
  181.                 else {
  182.                     if($sql_where == ""{
  183.                         $sql_where .= "dtb_customer.email_mobile ILIKE ? ";
  184.                     else {
  185.                         $sql_where .= "OR dtb_customer.email_mobile ILIKE ? ";
  186.                     }
  187.                 }
  188.                 $searchemail_mobile $this->addSearchStr($val);
  189.                 $this->arrVal[$searchemail_mobile;
  190.             }
  191.             $this->setWhere($sql_where);
  192.         }
  193.  
  194.         // 配信メールアドレス種別
  195.         if $mode == 'magazine' ){
  196.             if (!isset($this->arrSql['mail_type'])) $this->arrSql['mail_type'"";
  197.             // PCサイトメールが指定されている場合
  198.             if strlen($this->arrSql['mail_type']&& $this->arrSql['mail_type'== 1{
  199.                 // 携帯ドメインを外す。
  200.                 foreach($arrMobileDomain as $mobile_domain{
  201.                     $this->setWhere(" dtb_customer.email NOT ILIKE '%$mobile_domain");                    
  202.                 }
  203.             // 携帯サイトメールが指定されている場合
  204.             else ifstrlen($this->arrSql['mail_type']&& $this->arrSql['mail_type'== 2{
  205.                 $this->setWhere" dtb_customer.email_mobile <> ''  ");
  206.             }
  207.         }
  208.  
  209.         // HTML-mail
  210.         if $mode == 'magazine' ){
  211.             if (!isset($this->arrSql['htmlmail'])) $this->arrSql['htmlmail'"";
  212.             if strlen($this->arrSql['htmlmail']{
  213.                 $this->setWhere" mailmaga_flg = ? ");
  214.                 $this->arrVal[$this->arrSql['htmlmail'];
  215.             else {
  216.                 $this->setWhere" (mailmaga_flg = 1 or mailmaga_flg = 2) ");
  217.             }
  218.         }
  219.  
  220.         // 購入金額指定
  221.         if (!isset($this->arrSql['buy_total_from'])) $this->arrSql['buy_total_from'"";
  222.         if (!isset($this->arrSql['buy_total_to'])) $this->arrSql['buy_total_to'"";
  223.         ifis_numeric$this->arrSql["buy_total_from"|| is_numeric$this->arrSql["buy_total_to") ) {
  224.             $arrBuyTotal $this->selectRange($this->arrSql["buy_total_from"]$this->arrSql["buy_total_to"]"buy_total");
  225.             foreach ($arrBuyTotal as $data1{
  226.                 $this->arrVal[$data1;
  227.             }
  228.         }
  229.  
  230.         // 購入回数指定
  231.         if (!isset($this->arrSql['buy_times_from'])) $this->arrSql['buy_times_from'"";
  232.         if (!isset($this->arrSql['buy_times_to'])) $this->arrSql['buy_times_to'"";
  233.         ifis_numeric$this->arrSql["buy_times_from"|| is_numeric$this->arrSql["buy_times_to") ) {
  234.             $arrBuyTimes $this->selectRange($this->arrSql["buy_times_from"]$this->arrSql["buy_times_to"]"buy_times");
  235.             foreach ($arrBuyTimes as $data2{
  236.                 $this->arrVal[$data2;
  237.             }
  238.         }
  239.  
  240.         // 誕生日期間指定
  241.         if (!isset($this->arrSql['b_start_year'])) $this->arrSql['b_start_year'"";
  242.         if (!isset($this->arrSql['b_start_month'])) $this->arrSql['b_start_month'"";
  243.         if (!isset($this->arrSql['b_start_day'])) $this->arrSql['b_start_day'"";
  244.         if (!isset($this->arrSql['b_end_year'])) $this->arrSql['b_end_year'"";
  245.         if (!isset($this->arrSql['b_end_month'])) $this->arrSql['b_end_month'"";
  246.         if (!isset($this->arrSql['b_end_day'])) $this->arrSql['b_end_day'"";
  247.         if ( (strlen($this->arrSql['b_start_year']&& strlen($this->arrSql['b_start_month']&& strlen($this->arrSql['b_start_day']0||
  248.               strlen($this->arrSql['b_end_year']&& strlen($this->arrSql['b_end_month']&& strlen($this->arrSql['b_end_day']0{
  249.  
  250.             $arrBirth $this->selectTermRange($this->arrSql['b_start_year']$this->arrSql['b_start_month']$this->arrSql['b_start_day']
  251.                       $this->arrSql['b_end_year']$this->arrSql['b_end_month']$this->arrSql['b_end_day']"birth");
  252.             if (is_array($arrBirth)) {
  253.                 foreach ($arrBirth as $data3{
  254.                     $this->arrVal[$data3;
  255.                 }
  256.             }
  257.         }
  258.  
  259.         // 誕生月の検索
  260.         if (!isset($this->arrSql['birth_month'])) $this->arrSql['birth_month'"";
  261.         if (is_numeric($this->arrSql["birth_month"])) {
  262.             $this->setWhere(" EXTRACT(month from birth) = ?");
  263.             $this->arrVal[$this->arrSql["birth_month"];
  264.         }
  265.  
  266.         // 登録期間指定
  267.         if (!isset($this->arrSql['start_year'])) $this->arrSql['start_year'"";
  268.         if (!isset($this->arrSql['start_month'])) $this->arrSql['start_month'"";
  269.         if (!isset($this->arrSql['start_day'])) $this->arrSql['start_day'"";
  270.         if (!isset($this->arrSql['end_year'])) $this->arrSql['end_year'"";
  271.         if (!isset($this->arrSql['end_month'])) $this->arrSql['end_month'"";
  272.         if (!isset($this->arrSql['end_day'])) $this->arrSql['end_day'"";
  273.         if ( (strlen($this->arrSql['start_year']&& strlen($this->arrSql['start_month']&& strlen($this->arrSql['start_day']||
  274.                 (strlen($this->arrSql['end_year']&& strlen($this->arrSql['end_month']>&& strlen($this->arrSql['end_day']0) ) {
  275.  
  276.             $arrRegistTime $this->selectTermRange($this->arrSql['start_year']$this->arrSql['start_month']$this->arrSql['start_day']
  277.                             $this->arrSql['end_year']$this->arrSql['end_month']$this->arrSql['end_day']$regdate_col);
  278.             if (is_array($arrRegistTime)) {
  279.                 foreach ($arrRegistTime as $data4{
  280.                     $this->arrVal[$data4;
  281.                 }
  282.             }
  283.         }
  284.  
  285.         // 最終購入日指定
  286.         if (!isset($this->arrSql['buy_start_year'])) $this->arrSql['buy_start_year'"";
  287.         if (!isset($this->arrSql['buy_start_month'])) $this->arrSql['buy_start_month'"";
  288.         if (!isset($this->arrSql['buy_start_day'])) $this->arrSql['buy_start_day'"";
  289.         if (!isset($this->arrSql['buy_end_year'])) $this->arrSql['buy_end_year'"";
  290.         if (!isset($this->arrSql['buy_end_month'])) $this->arrSql['buy_end_month'"";
  291.         if (!isset($this->arrSql['buy_end_day'])) $this->arrSql['buy_end_day'"";
  292.  
  293.         if ( (strlen($this->arrSql['buy_start_year']&& strlen($this->arrSql['buy_start_month']&& strlen($this->arrSql['buy_start_day']||
  294.                 (strlen($this->arrSql['buy_end_year']&& strlen($this->arrSql['buy_end_month']>&& strlen($this->arrSql['buy_end_day']0) ) {
  295.             $arrRegistTime $this->selectTermRange($this->arrSql['buy_start_year']$this->arrSql['buy_start_month']$this->arrSql['buy_start_day']
  296.                             $this->arrSql['buy_end_year']$this->arrSql['buy_end_month']$this->arrSql['buy_end_day']"last_buy_date");
  297.             if (is_array($arrRegistTime)) {
  298.                 foreach ($arrRegistTime as $data4{
  299.                     $this->arrVal[$data4;
  300.                 }
  301.             }
  302.         }
  303.  
  304.         //購入商品コード
  305.         if (!isset($this->arrSql['buy_product_code'])) $this->arrSql['buy_product_code'"";
  306.         if strlen($this->arrSql['buy_product_code']{
  307.             $this->setWhere"customer_id IN (SELECT customer_id FROM dtb_order WHERE order_id IN (SELECT order_id FROM dtb_order_detail WHERE product_code LIKE ? ))");
  308.             $search_buyproduct_code $this->addSearchStr($this->arrSql['buy_product_code']);
  309.             $this->arrVal[$search_buyproduct_code;
  310.         }
  311.  
  312.         //購入商品名称
  313.         if (!isset($this->arrSql['buy_product_name'])) $this->arrSql['buy_product_name'"";
  314.         if strlen($this->arrSql['buy_product_name']{
  315.             $this->setWhere"customer_id IN (SELECT customer_id FROM dtb_order WHERE order_id IN (SELECT order_id FROM dtb_order_detail WHERE product_name LIKE ? ))");
  316.             $search_buyproduct_name $this->addSearchStr($this->arrSql['buy_product_name']);
  317.             $this->arrVal[$search_buyproduct_name;
  318.         }
  319.  
  320.         //カテゴリーを選択している場合のみ絞込検索を行う
  321.         if (!isset($this->arrSql['category_id'])) $this->arrSql['category_id'"";
  322.         if strlen($this->arrSql['category_id']!= ""){
  323.             //カテゴリーで絞込検索を行うSQL文生成
  324.             list($tmp_where$tmp_arrval$objDb->sfGetCatWhere(SC_Utils_Ex::sfManualEscape($this->arrSql['category_id']));
  325.  
  326.             //カテゴリーで絞込みが可能の場合
  327.             if($tmp_where != ""{
  328.                 $this->setWhere" customer_id IN (SELECT distinct customer_id FROM dtb_order WHERE order_id IN (SELECT distinct order_id FROM dtb_order_detail WHERE product_id IN (SELECT product_id FROM dtb_product_categories WHERE ".$tmp_where." ))) ");
  329.                 $this->arrVal = array_merge((array)$this->arrVal(array)$tmp_arrval);
  330.             }
  331.         }
  332.         //携帯電話番号
  333.         if (!isset($this->arrSql['cell'])) $this->arrSql['cell'"";
  334.         if is_numeric$this->arrSql['cell') ) {
  335.             $this->setWhere"(cell01 || cell02 || cell03 LIKE ?)" );
  336.             $searchTel $this->addSearchStr($this->arrSql['cell']);
  337.             $this->arrVal[ereg_replace("-"""$searchTel);
  338.         }
  339.  
  340.         //キャンペーン
  341.         if (!isset($this->arrSql['campaign_id'])) $this->arrSql['campaign_id'"";
  342.         if is_numeric$this->arrSql['campaign_id') ) {
  343.             $this->setWhere" customer_id IN (SELECT distinct customer_id FROM dtb_campaign_order WHERE campaign_id = ?)" );
  344.             $this->arrVal[$this->arrSql['campaign_id'];
  345.         }
  346.  
  347.         //会員状態
  348.         if (!isset($this->arrSql['status'])) $this->arrSql['status'"";
  349.         if is_array$this->arrSql['status') ){
  350.             $arrStatusVal $this->setItemTerm$this->arrSql['status',"status" );
  351.             foreach ($arrStatusVal as $data{
  352.                 $this->arrVal[$data;
  353.             }
  354.         }
  355.  
  356.         $this->setOrder"customer_id DESC" );
  357.     }
  358.  
  359.     // 検索用SQL
  360.     function getList({
  361.         $this->select = "SELECT customer_id,name01,name02,kana01,kana02,sex,email,tel01,tel02,tel03,pref,status FROM dtb_customer ";
  362.         return $this->getSql(0);
  363.     }
  364.  
  365.     function getListMailMagazine($is_mobile false{
  366.  
  367.         $colomn $this->getMailMagazineColumn($is_mobile);
  368.         $this->select = "
  369.             SELECT
  370.                 $colomn
  371.             FROM
  372.                 dtb_customer";
  373.         return $this->getSql(0);
  374.     }
  375.  
  376.     function getMailMagazineColumn($is_mobilefalse{
  377.         if($is_mobile == true{
  378.             $email_column "dtb_customer.email_mobile as email";
  379.         else {
  380.             $email_column "dtb_customer.email";
  381.         }
  382.  
  383.         $column ="dtb_customer.customer_id,
  384.                 dtb_customer.name01,
  385.                 dtb_customer.name02,
  386.                 dtb_customer.kana01,
  387.                 dtb_customer.kana02,
  388.                 dtb_customer.sex,
  389.                 $email_column,
  390.                 dtb_customer.tel01,
  391.                 dtb_customer.tel02,
  392.                 dtb_customer.tel03,
  393.                 dtb_customer.pref,
  394.                 dtb_customer.create_date,
  395.                 dtb_customer.mailmaga_flg";
  396.  
  397.         return $column;
  398.     }
  399.  
  400.     // 検索総数カウント用SQL
  401.     function getListCount({
  402.         $this->select = "SELECT COUNT(customer_id) FROM dtb_customer ";
  403.         return $this->getSql(1);
  404.     }
  405.  
  406.     // CSVダウンロード用SQL
  407.     function getListCSV($arrColumnCSV{
  408.         $this->arrColumnCSV = $arrColumnCSV;
  409.         $i 0;
  410.         foreach ($this->arrColumnCSV as $val{
  411.             if ($i != 0$state .= ", ";
  412.             $state .= $val["sql"];
  413.             $i ++;
  414.         }
  415.  
  416.         $this->select = "SELECT " .$state" FROM dtb_customer ";
  417.         return $this->getSql(2);
  418.     }
  419.  
  420.     function getWhere({
  421.         return array($this->where$this->arrVal);
  422.     }
  423. }
  424. ?>

Documentation generated on Tue, 28 Apr 2009 18:13:13 +0900 by phpDocumentor 1.4.2